home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BCI NET
/
BCI NET Dec 94.iso
/
archives
/
programming
/
e
/
stderr.lha
/
stderr.e
< prev
next >
Wrap
Text File
|
1994-09-06
|
3KB
|
152 lines
-> StdErr.E
-> The flexible stderr port for Amiga E
OPT MODULE
MODULE 'dos/datetime','dos/dos'
-> Recommended tests to make:
RAISE "OPEN" IF Open() = NIL,
"MEM" IF New() = NIL,
"FILE" IF VfPrintf() = TRUE,
"FILE" IF Fputs() = TRUE
/*endfold*/
-> Global declarations (global to StdErr)
OBJECT err
PRIVATE
filename,
private,
fh,
ioerr,
name
ENDOBJECT
DEF stderr:PTR TO err
/*endfold*/
PROC close()
IF stderr.fh AND (stderr.fh <> stdout) THEN Close(stderr.fh)
stderr.fh:=0
ENDPROC
PROC open() HANDLE
DEF dt:datetime,tmp
stderr.ioerr:=SetIoErr(0)
IF stderr.filename <> stderr.private
close()
IF stderr.filename=stdout
stderr.fh:=stdout
ENDIF
stderr.private:=stderr.filename
ENDIF
IF stderr.private AND (stderr.private <> stdout)
DateStamp(dt.stamp)
dt.format:=FORMAT_DOS -> set datetime options
dt.flags:=0
dt.strday:=String(11)
dt.strdate:=String(11)
dt.strtime:=String(11)
DateToStr(dt) -> make into string
IF (stderr.fh <> stdout) AND (stderr.fh = NIL)
IF tmp := Open(stderr.private,MODE_READWRITE)
stderr.fh := tmp
ELSE
stderr.fh := stdout
ENDIF
ENDIF
Seek(stderr.fh,0,OFFSET_END)
VfPrintf(stderr.fh,'\s: \s | \s | \s\n',[stderr.name,dt.strday,dt.strdate,dt.strtime])
Flush(stderr.fh)
Dispose(dt.strday); Dispose(dt.strdate); Dispose(dt.strtime)
ELSEIF wbmessage -> if called from icon
IF (stderr.fh <> stdout) AND stderr.fh THEN Close(stderr.fh)
WriteF('')
stderr.fh:=stdout
SetIoErr(0)
ELSEIF stderr.private <> stdout
IF (stderr.fh <> stdout) AND stderr.fh THEN Close(stderr.fh)
stderr.fh:=Open('CONSOLE:',NEWFILE) -> for stderr activity on CLI call
ENDIF
IF stderr.fh=0
stderr.fh:=stdout
ENDIF
EXCEPT
close()
stderr.ioerr:=SetIoErr(0)
WriteF('*** Error in stderr.open()')
IF stderr.ioerr THEN PrintFault(stderr.ioerr,stderr.name)
WriteF('\n')
Raise(exception)
ENDPROC
EXPORT PROC err_Name(program_name=NIL) HANDLE
IF stderr=NIL
NEW stderr
ENDIF
IF program_name THEN stderr.name := program_name ELSE stderr.name := 'StdErr'
EXCEPT
Raise(exception)
ENDPROC
EXPORT PROC err_Dispose()
IF stderr=NIL THEN RETURN
close()
IF wbmessage AND stdout THEN WriteF('Press RETURN to close window.\b')
Dispose(stderr)
stderr:=NIL
ENDPROC
EXPORT PROC err_WriteF(format=NIL,items=NIL) HANDLE
-> Here's a way to write errors without having to open a window until we
-> absolutely HAVE to.
DEF ioerr
IF stderr
open()
ELSE
NEW stderr
open()
ENDIF
IF items
VfPrintf(stderr.fh,format,items)
Flush(stderr.fh)
ELSE
IF format
Fputs(stderr.fh,format)
Flush(stderr.fh)
ENDIF
ENDIF
IF stderr.ioerr
ioerr:=String(81)
IF Fault(stderr.ioerr,stderr.name,ioerr,80)
Fputs(stderr.fh,ioerr)
Fputs(stderr.fh,'\n')
Flush(stderr.fh)
ENDIF
ENDIF
EXCEPT
IF stderr=NIL THEN NEW stderr
ioerr:=SetIoErr(0)
WriteF('*** Error in err_WriteF()!')
IF ioerr THEN PrintFault(ioerr,'StdErr')
WriteF('\n')
Raise(exception)
ENDPROC
EXPORT PROC err_New(filename=NIL) HANDLE
IF stderr=NIL THEN NEW stderr
close()
IF (stderr.filename<>0) AND (stderr.filename<>stdout) THEN Dispose(stderr.filename)
stderr.filename:=filename
IF stderr.name = NIL THEN stderr.name := 'StdErr'
EXCEPT
Raise(exception)
ENDPROC
/*EE folds
-1
8 7 12 7 10 5 12 2 15 48 18 6 21 5 24 33 27 7 EE folds*/